/*
 * @Author: _oufen
 * @Date: 2023-07-18 18:33:37
 * @LastEditTime: 2023-07-23 16:19:01
 * @Description:
 */
/**
 *************************************************************************************************************************
 * @file   control.h
 * @author  oufen
 * @version V1.0
 * @date    2023-07-18
 * @brief
 *************************************************************************************************************************
 * @attention
 *
 *
 *
 *************************************************************************************************************************
 */

/* Define to prevent recursive inclusion --------------------------------------------------------------------------------*/
#ifndef __MYCONTROL_H
#define __MYCONTROL_H

/* Includes -------------------------------------------------------------------------------------------------------------*/
#include "system.h"

/* 定义 -----------------------------------------------------------------------------------------------------------------*/
#define RESOLUTION_RATIO 13                           // 编码器的分辨率 即编码器的线数 13线
#define RESOULTION_TOTAL_RATIO (RESOLUTION_RATIO * 2) // 经过备频后的分辨率  中断读取编码器脉冲 二倍频
#define REDUCTION_RATIO 20                            // 电机的减速比     MG370减速比 1：34  MG310减速比  1：20     电机转一圈脉冲为520个
#define PID_PERIOD 5                                  /* 定时器周期5ms */

// 舵机角度 初始角度  不是90°
#define SERVO_INIT 85.0
#define SERVO_MID_CCR 27000 // 舵机初始化角度 27000
#define SERVO_MAX 36000     // 右边最大角度
#define SERVO_MIN 19000     // 左边最大角度

#define SERVO_LEFT_FIRST_ANGLE 37000 // 第一次向左上走 走到倒车位置
#define SERVO_GO_RIGHT_ANGLE 36000

#define SERVO_GO_Lasr_Angle 19000

#define SERVO_CAR_RIGHT 32000

typedef struct // 变量定义结构体
{
    /* data */
    int32_t UnitTime_Motor1Pluse; // 单位时间内电机1脉冲数
    int32_t UnitTime_Motor2Pluse; // 单位时间内电机2脉冲数

    long Average_Pluse; // 平均脉冲

    long Sigma_Motor1_Pluse; // Motor1累积脉冲
    long Sigma_Motor2_Pluse; // Motor2累积脉冲

    float Current_Motor1_Distance; // 左电机当前距离
    float Current_Motor2_Distance; // 右电机当前距离

    float Line_Out; // 巡线补偿

    int32_t Motor1_PWM_Out; // 电机1PWM输出
    int32_t Motor2_PWM_Out; // 电机2PWM输出

    uint16_t Timer_threshold_value; // 定时阈值   可以定时 蜂鸣器响啥的 灯亮啥的

    uint8_t task; // 任务标志

} Param_InitTypedef;

typedef struct // 标志位结构体
{
    /* data */
    uint8_t Is_Enable_Motor; // 电机使能
    uint8_t Stop_Car;        // 小车已停下标志位

    uint8_t Start_Flag;  // 开始计时
    uint8_t Is_Timer_Up; // 是否定时时间到

} Flag_InitTypedef;

/* 提供给其他C文件调用的函数 --------------------------------------------------------------------------------------------*/
extern Param_InitTypedef Param;
extern Flag_InitTypedef Flag;
extern float speed1, speed2; // 速度  rpm

extern uint32_t pathlenth; // 小车行驶的路程

void Timer4_init(void); // 定时器4初始化

#endif /* __XXX_H */

/*****************************************************END OF FILE*********************************************************/
